package cl.thesouthfun.mantenedor.dao;

import java.util.ArrayList;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import cl.thesouthfun.mantenedor.db.DatabaseHelper;
import cl.thesouthfun.mantenedor.util.Constantes;
import cl.thesouthfun.mantenedor.vo.Pasajero;

public class PasajeroDAO {
	
	private String PSJ_CLMN_NAMES[] = {Constantes.PSJ_CLMN_RUT,
			Constantes.PSJ_CLMN_NOMBRE,
			Constantes.PSJ_CLMN_APELLIDOP,
			Constantes.PSJ_CLMN_APELLIDOM};
	
	
	public PasajeroDAO(){
		if(DatabaseHelper.SQL_CREATE == null){
			
			DatabaseHelper.SQL_CREATE = "CREATE TABLE " + Constantes.PSJ_TABLE_NAME + "(" +
					Constantes.PSJ_CLMN_RUT + " TEXT PRIMARY KEY, " +
					Constantes.PSJ_CLMN_NOMBRE + " TEXT NOT NULL, " +
					Constantes.PSJ_CLMN_APELLIDOP + " TEXT NOT NULL, " + 
					Constantes.PSJ_CLMN_APELLIDOM + " TEXT NOT NULL);";
			
			DatabaseHelper.SQL_UPGRADE = "DROP TABLE IF EXISTS " + Constantes.PSJ_TABLE_NAME;
		}
	}
	
	
	public boolean addPasajero(Pasajero pasajero, Context context) throws Exception{
		
		DatabaseHelper dbHelper = new DatabaseHelper(context);
		ContentValues cv = new ContentValues();
		dbHelper.open(Constantes.PSJ_DB_NAME, 1);
		
		cv.put(Constantes.PSJ_CLMN_RUT, pasajero.getRut());
		cv.put(Constantes.PSJ_CLMN_NOMBRE, pasajero.getNombre());
		cv.put(Constantes.PSJ_CLMN_APELLIDOP, pasajero.getApellidoPaterno());
		cv.put(Constantes.PSJ_CLMN_APELLIDOM, pasajero.getApellidoMaterno());
		
		
		SQLiteDatabase sqliteDatabase = dbHelper.getSqLiteDatabase();
		long result = sqliteDatabase.insert(Constantes.PSJ_TABLE_NAME, null, cv);
		
		dbHelper.close();
		
		
		return result!=-1;
	}
	
	public ArrayList<Pasajero> getListPasajero(Context context){
		
		ArrayList<Pasajero> listPasajero = new ArrayList<Pasajero>();
		DatabaseHelper dbHelper = new DatabaseHelper(context);
		try {
			dbHelper.open(Constantes.PSJ_DB_NAME, 1);
			SQLiteDatabase sqliteDatabase = dbHelper.getSqLiteDatabase();
			

			Cursor cursor =  sqliteDatabase.query(Constantes.PSJ_TABLE_NAME, 
					PSJ_CLMN_NAMES, 
					null, null, null, null, Constantes.PSJ_CLMN_APELLIDOP + " ASC");
			
			int indexRut = cursor.getColumnIndex(Constantes.PSJ_CLMN_RUT);
			int indexNombre = cursor.getColumnIndex(Constantes.PSJ_CLMN_NOMBRE);
			int indexApellidoP = cursor.getColumnIndex(Constantes.PSJ_CLMN_APELLIDOP);
			int indexApellidoM = cursor.getColumnIndex(Constantes.PSJ_CLMN_APELLIDOM);
			
			for (cursor.moveToFirst(); !cursor.isAfterLast() ;cursor.moveToNext()){
				Pasajero pasajero = new Pasajero();
				
				pasajero.setRut(cursor.getString(indexRut));
				pasajero.setNombre(cursor.getString(indexNombre));
				pasajero.setApellidoPaterno(cursor.getString(indexApellidoP));
				pasajero.setApellidoMaterno(cursor.getString(indexApellidoM));
				
				listPasajero.add(pasajero); 

			}
		} catch (Exception e) {

		}
		dbHelper.close();
		return listPasajero;
	}
	
	public ArrayList<Pasajero> getPasajeroByRut(String rut, Context context){
		ArrayList<Pasajero> listPasajero = new ArrayList<Pasajero>();
		DatabaseHelper dbHelper = new DatabaseHelper(context);
		try {
			dbHelper.open(Constantes.PSJ_DB_NAME, 1);
			SQLiteDatabase sqliteDatabase = dbHelper.getSqLiteDatabase();
			

			Cursor cursor =  sqliteDatabase.query(Constantes.PSJ_TABLE_NAME, 
					PSJ_CLMN_NAMES, 
					Constantes.PSJ_CLMN_RUT +" LIKE ? ", new String[]{rut+"%"}, null, null, null);
			
			int indexRut = cursor.getColumnIndex(Constantes.PSJ_CLMN_RUT);
			int indexNombre = cursor.getColumnIndex(Constantes.PSJ_CLMN_NOMBRE);
			int indexApellidoP = cursor.getColumnIndex(Constantes.PSJ_CLMN_APELLIDOP);
			int indexApellidoM = cursor.getColumnIndex(Constantes.PSJ_CLMN_APELLIDOM);
			
			for (cursor.moveToFirst(); !cursor.isAfterLast() ;cursor.moveToNext()){
				Pasajero pasajero = new Pasajero();
				
				pasajero.setRut(cursor.getString(indexRut));
				pasajero.setNombre(cursor.getString(indexNombre));
				pasajero.setApellidoPaterno(cursor.getString(indexApellidoP));
				pasajero.setApellidoMaterno(cursor.getString(indexApellidoM));
				
				listPasajero.add(pasajero); 

			}
		} catch (Exception e) {

		}
		dbHelper.close();
		return listPasajero;
	}


	public boolean deletePasajero(String rut, Context context) {
		DatabaseHelper dbHelper = new DatabaseHelper(context);
		int eliminado = 0; 
		try {
			dbHelper.open(Constantes.PSJ_DB_NAME, 1);
			SQLiteDatabase sqliteDatabase = dbHelper.getSqLiteDatabase();
			
			eliminado = sqliteDatabase.delete(Constantes.PSJ_TABLE_NAME, Constantes.PSJ_CLMN_RUT +"=?", new String[]{rut});
			
		}catch(Exception e){
			
		}
		dbHelper.close();
		return eliminado==1;
		
	}

}
